﻿using System;
using System.Collections.Generic;
using System.Text;

namespace daBase.Objects.AnalysisErrors
{
    // Безопасные объекты
    using Objects.Safe;

    /// <summary>
    /// Ошибка анализа
    /// </summary>
    public class ParsingError : Exception
    {
        // Поля ошибки
        private string message, hint, code;
        private Importance level;
        private string file;
        private int line;
        private SafeDictionary<string, string> metatags;

        /// <summary>
        /// Сообщение об ошибке
        /// </summary>
        public string Message { get { return message; } }

        /// <summary>
        /// Уровень важности ошибки
        /// </summary>
        public int Level { get { return level.Value; } }

        /// <summary>
        /// Класс важности ошибки
        /// </summary>
        public ErrorLevel WarningLevel { get { return level.Level; } }

        /// <summary>
        /// Информация о файле, содержащем ошибку
        /// </summary>
        public string File { get { return file; } }

        /// <summary>
        /// Номер строки, содержащей ошибку
        /// </summary>
        public int Line { get { return line; } }

        /// <summary>
        /// Часть кода, содержащая ошибку
        /// </summary>
        public string Code { get { return code; } }

        /// <summary>
        /// Мета данные
        /// </summary>
        public SafeDictionary<string, string> MetaTags { get { return metatags; } set { metatags = value; } }

        /// <summary>
        /// Подсказка по устранению ошибки
        /// </summary>
        public string Hint { get { return hint; } }

        /// <summary>
        /// Параметрический конструктор
        /// </summary>
        /// <param name="Message">сообщение об ошибке</param>
        /// <param name="Level">уровень важности ошибки</param>
        /// <param name="File">имя файла, содержащем ошибку</param>
        /// <param name="Line">номер строки, содержащей ошибку</param>
        /// <param name="Code">Часть кода, содержащая ошибку</param>
        /// <param name="MetaTags">мета данные</param>
        /// <param name="Hint">подсказка по устранению ошибки</param>
        public ParsingError(string Message, int Level, string File, int Line, string Code, SafeDictionary<string, string> MetaTags, string Hint)
        {
            message = Message;
            level = new Importance(Level);
            file = File;
            line = Line;
            code = Code;
            metatags = MetaTags;
            hint = Hint;
        }
    }
}
